Cargamos las librerías

library(readxl) #subir nuestros archivos de excel
library(ggplot2) #realizar visualizaciones como gráficos
library(dplyr) #manipulación de nuestra data
library(tidyr) #ordenas nuestra data, especificamente en drop_na
library(plotly) #gráficos interactivos
library(viridis) #paleta de color prediseñada
library(stringr) #la usamos para ajustar el tamaño del texto en nuestros ejes
library(tidyverse) 

Subimos nuestra base:

base<- read.csv("linea-mujeres.csv", fileEncoding="latin1")

Análisis

Renombrar nuestros valores, en este caso los meses numéricos por su nombre [01 -> enero]

base %>% 
  filter(TEMATICA_2=="VIOLENCIA FAMILIAR",
         AÑO_ALTA >=2017) %>% 
  count(AÑO_ALTA, MES_ALTA)
##    AÑO_ALTA MES_ALTA   n
## 1      2017        1 282
## 2      2017        2 281
## 3      2017        3 248
## 4      2017        4 290
## 5      2017        5 321
## 6      2017        6 314
## 7      2017        7 312
## 8      2017        8 308
## 9      2017        9 280
## 10     2017       10 302
## 11     2017       11 277
## 12     2017       12 256
## 13     2018        1 322
## 14     2018        2 338
## 15     2018        3 291
## 16     2018        4 364
## 17     2018        5 406
## 18     2018        6 395
## 19     2018        7 403
## 20     2018        8 364
## 21     2018        9 338
## 22     2018       10 342
## 23     2018       11 329
## 24     2018       12 309
## 25     2019        1 314
## 26     2019        2 217
## 27     2019        3 243
## 28     2019        4 291
## 29     2019        5 300
## 30     2019        6 341
## 31     2019        7 355
## 32     2019        8 407
## 33     2019        9 318
## 34     2019       10 369
## 35     2019       11 317
## 36     2019       12 341
## 37     2020        1 395
## 38     2020        2 445
## 39     2020        3 460
## 40     2020        4 222
## 41     2020        5  53
## 42     2020        6  53
## 43     2020        7  53
## 44     2020        8  30
## 45     2020        9  35
## 46     2020       10  38
## 47     2020       11   2
base %>% 
  filter(TEMATICA_2=="VIOLENCIA FAMILIAR",
         AÑO_ALTA >=2017) %>% 
  mutate(MES=case_when(
    MES_ALTA== 1~"ene",
    MES_ALTA== 2~"feb",
    MES_ALTA== 3~"mar",
    MES_ALTA== 4~"abr",
    MES_ALTA== 5~"may",
    MES_ALTA== 6~"jun",
    MES_ALTA== 7~"jul",
    MES_ALTA== 8~"ago",
    MES_ALTA== 9~"sep",
    MES_ALTA== 10~"oct",
    MES_ALTA== 11~"nov",
    MES_ALTA== 12~"dic"),
    MES=factor(MES,
               levels=c("ene", "feb", "mar","abr", "may", "jun",
                        "jul", "ago", "sep","oct", "nov", "dic"))) %>% 
  count(AÑO_ALTA, MES, name = "TOTAL") %>% 
  pivot_wider(names_from = "AÑO_ALTA",
              values_from = "TOTAL") #pivot_wider es para cambiar la posición de filas y columnas
## # A tibble: 12 × 5
##    MES   `2017` `2018` `2019` `2020`
##    <fct>  <int>  <int>  <int>  <int>
##  1 ene      282    322    314    395
##  2 feb      281    338    217    445
##  3 mar      248    291    243    460
##  4 abr      290    364    291    222
##  5 may      321    406    300     53
##  6 jun      314    395    341     53
##  7 jul      312    403    355     53
##  8 ago      308    364    407     30
##  9 sep      280    338    318     35
## 10 oct      302    342    369     38
## 11 nov      277    329    317      2
## 12 dic      256    309    341     NA

Visualizar el comportamiento de las llamadas en el tiempo:

base %>% 
  filter(TEMATICA_2 %in% c("VIOLENCIA FAMILIAR"),
         AÑO_ALTA >=2017) %>% 
  count(AÑO_ALTA, MES_ALTA)%>% 
  ggplot(aes(x = MES_ALTA, y = n, 
             fill = AÑO_ALTA, colour=AÑO_ALTA, group=1)) +
  geom_point() +
  geom_line()+
  scale_color_viridis_c(option = "viridis", direction = 1) + #color de relleno
  scale_fill_viridis_c(option = "viridis", direction = 1) + #color del contorno
  scale_x_continuous(limits = c(0, 12))+ #límites del eje x
  labs(title = "", fill="Año", colour="Año",
       x="", y="")+ #titulo
  theme_minimal() -> grafico_mes

Comparativa entre meses

ggplotly(grafico_mes)

Transformemos fechas

Es necesario descargar e instalar lubridate

library(lubridate)

base$FECHA <-as.Date(base$FECHA_ALTA, format="%d/%m/%Y") #definir nuetra variable en tipo de fecha
base$PERIODO  <-format(as.Date(base$FECHA_ALTA, format="%d/%m/%Y"), "%Y/%m") # 15/03/2022 -> 03/2022

base %>% 
  filter(TEMATICA_2%in%c("VIOLENCIA FAMILIAR")) %>% 
  count(PERIODO, AÑO_ALTA) %>% 
  ggplot(aes(x=PERIODO, y=n,group=1))+
    geom_point(fill="purple", colour="purple", size = 2)+
    geom_line(colour="purple", size = 1) +
    # geom_text(aes(x=PERIODO, y=n, label=n), 
    #           colour="black", size=4, angle=90,
    #           hjust=-1, vjust=1,)+              #añadir la etiqueta de valor
  geom_vline(xintercept ="2020/03", linetype="dashed",
             color='red', size=1)+ #añadir linea vertical
  labs(title = "Comparativa entre llamadas por violencia y violencia familiar",
       x="Período mensual", y="Total de llamadas", 
       fill="Temática", colour="Temática",
       caption = "Elaboración propia con datos del Gobierno de la CDMX")+
  theme_minimal()+
  theme(axis.text.x = element_text(angle = 90))->graf_periodo #rotar el texto del eje

Comportamiento de las llamadas de violencia en el tiempo

graf_periodo

ggplotly(graf_periodo)

Calculamos el promedio de llamadas en todo el período

base %>% 
  filter(TEMATICA_2 == "VIOLENCIA FAMILIAR") %>% 
  count(PERIODO, AÑO_ALTA) %>% 
  summarise(Promedio=mean(n))  # Calcular el promedio de llamadas por V. Familiar
##   Promedio
## 1 281.4694
graf_periodo +
  geom_hline(yintercept = 281.46, colour="orange") #añadir línea horizontal


Quiénes están realizando las llamadas por motivos de violencia familiar

##                         OCUPACION AÑO_ALTA TOTAL
## 1                    EMPLEADO (A)     2019  1638
## 2                    EMPLEADO (A)     2018  1331
## 3                           HOGAR     2019  1297
## 4                           HOGAR     2018  1160
## 5                    EMPLEADO (A)     2020   830
## 6                    EMPLEADO (A)     2017   828
## 7                           HOGAR     2017   807
## 8                           HOGAR     2020   573
## 9                     COMERCIANTE     2019   347
## 10                    COMERCIANTE     2018   231
## 11                    COMERCIANTE     2017   164
## 12                   EMPLEADO (A)     2016   160
## 13                          HOGAR     2016   157
## 14                     ESTUDIANTE     2018   138
## 15                    COMERCIANTE     2020   115
## 16          TRABAJO INDEPENDIENTE     2019   113
## 17                     ESTUDIANTE     2019   110
## 18                 PENSIONADO (A)     2019   101
## 19          TRABAJO INDEPENDIENTE     2018    97
## 20                DESEMPLEADO (A)     2018    76
## 21                DESEMPLEADO (A)     2019    75
## 22                     ESTUDIANTE     2017    71
## 23                 PENSIONADO (A)     2018    68
## 24                     ESTUDIANTE     2020    67
## 25          TRABAJO INDEPENDIENTE     2020    65
## 26     TRABAJADOR (A) DE GOBIERNO     2019    64
## 27 EMPLEADA DEL HOGAR(REMUNERADO)     2019    63
## 28          TRABAJO INDEPENDIENTE     2017    59
## 29                DESEMPLEADO (A)     2017    48
## 30                DESEMPLEADO (A)     2020    45
## 31     TRABAJADOR (A) DE GOBIERNO     2018    37
## 32                 PENSIONADO (A)     2020    36
## 33                 PENSIONADO (A)     2017    32
## 34                    COMERCIANTE     2016    31
## 35     TRABAJADOR (A) DE GOBIERNO     2017    30
## 36     TRABAJADOR (A) DE GOBIERNO     2020    29
## 37 EMPLEADA DEL HOGAR(REMUNERADO)     2018    23
## 38 EMPLEADA DEL HOGAR(REMUNERADO)     2020    22
## 39 EMPLEADA DEL HOGAR(REMUNERADO)     2017    20
## 40                DESEMPLEADO (A)     2016    12
## 41                     ESTUDIANTE     2016    11
## 42                           OTRO     2017    10
## 43                 PENSIONADO (A)     2016     6
## 44          TRABAJO INDEPENDIENTE     2016     6
## 45 EMPLEADA DEL HOGAR(REMUNERADO)     2016     5
## 46                 EMPRESARIO (A)     2018     5
## 47                 EMPRESARIO (A)     2019     5
## 48                 EMPRESARIO (A)     2020     4
## 49                           OTRO     2016     4
## 50     TRABAJADOR (A) DE GOBIERNO     2016     3
## 51                 EMPRESARIO (A)     2016     1
## 52                 EMPRESARIO (A)     2017     1

base %>% 
  filter(TEMATICA_2=="VIOLENCIA FAMILIAR") %>% 
  count(OCUPACION, AÑO_ALTA, name = "TOTAL") %>% 
  drop_na() %>% 
  arrange(-TOTAL) %>% 
  pivot_wider(names_from = "OCUPACION", values_from = "TOTAL")  #invertir la posición entre filas y columnas
## # A tibble: 5 × 12
##   AÑO_ALTA `EMPLEADO (A)` HOGAR COMERCIANTE ESTUDIANTE `TRABAJO INDEPENDIENTE`
##      <int>          <int> <int>       <int>      <int>                   <int>
## 1     2019           1638  1297         347        110                     113
## 2     2018           1331  1160         231        138                      97
## 3     2020            830   573         115         67                      65
## 4     2017            828   807         164         71                      59
## 5     2016            160   157          31         11                       6
## # … with 6 more variables: `PENSIONADO (A)` <int>, `DESEMPLEADO (A)` <int>,
## #   `TRABAJADOR (A) DE GOBIERNO` <int>, `EMPLEADA DEL HOGAR(REMUNERADO)` <int>,
## #   OTRO <int>, `EMPRESARIO (A)` <int>
base %>% 
  filter(TEMATICA_2=="VIOLENCIA FAMILIAR") %>% 
  count(OCUPACION, AÑO_ALTA, name = "TOTAL") %>% 
  drop_na() %>% 
  arrange(-TOTAL) %>% 
 ggplot(aes(x=reorder(OCUPACION, -TOTAL), y=TOTAL, fill=as.factor(AÑO_ALTA))) + #as.factor() que el valor númerico se convierta a factor, o sea una variable categórica con un orden
  geom_col(position = "dodge") +
  scale_fill_viridis_d(option = "viridis", direction = 1) +
  scale_x_discrete(labels = function(x) str_wrap(x, width = 2)) + #Este reglón es para ajustar el tamaño de texto que cabe en cada var de x
  labs(title = "", fill="Año", 
       x="", y="Total de llamadas")+
  theme_minimal()+
  theme(axis.text.x = element_text(angle = 45)) ->grafico_ocupación

ggplotly(grafico_ocupación)